查看原文
其他

服务管理和启动流程(1)-systemctl启动、查看服务

Cloud研习社 Cloud研习社 2023-06-06


每周二、四、六定期更新,我们不见不散!


早期的centos使用systemV开机启动服务,CentOS7开始,改用systemd这个启动服务管理。

systemd的好处:

  • 并行处理所有服务,加速开机
    以前的init启动脚本是逐项依次启动的方式,没有依赖关系的服务之间也是逐项启动。这样的话就会拉长启动时间,现在服务器硬件、操作系统都支持并行,所以systemd可以让没有依赖关系的服务同时启动,缩短启动时间。
  • 管理方便
    systemd管理就只要一个systemd服务,通过systemctl这个命令进行操作,不会像systemV那样还需要init、chkconfig、service等相关命令。
  • 自启动依赖服务
    systemd会自动检查服务的依赖性并启动它。比如服务A依赖服务B,在启动服务A的时候服务B并没有启动,这个时候systemd会帮你自动把服务B启动起来。
  • 向下兼容旧的init服务(即systemV开机启动服务)

使用systemctl管理服务


systemd这个启动服务的机制主要靠systemctl来管理。systemd把所有的服务(即进程)都看成是一个服务单位(unit),然后再把这个unit分成不同的类型(type),systemd里支持的类型(type)有service\socker\target\path\snapshot\timer等。


A

使用systemctl管理单一服务(service unit):自启动、启动、查看状态


服务的启动分为两种:开机启动和现在手动启动。
[root@studyclub ~]# systemctl COMMAND [unit]
# COMMAND如下:
start   启动服务
restart  重启服务
stop    停止服务
reload   不关闭服务的情况下,重新加载服务的配置文件,让修改的配置文件立即生效
enable   让服务开机自启动
disable   关闭开机自启动
status    查看服务的当前运行状态:正在运行、已经停止运行等
is-active  目前有没有正在运行(基本不用)
is-enable  有没有配置这个服务的开机自启动
list-dependencies  查看本服务依赖哪些服务


示例:


1. 查看crond这个服务的状态
[root@studyclub ~]# systemctl status nginx
nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-03-18 15:53:15 CST; 36s ago
 Main PID: 56068 (nginx)
   CGroup: /system.slice/nginx.service
           ├─56068 nginx: master process /usr/sbin/nginx
           └─56069 nginx: worker process

Mar 18 15:53:15 studyclub systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 18 15:53:15 studyclub nginx[56063]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Mar 18 15:53:15 studyclub nginx[56063]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Mar 18 15:53:15 studyclub systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
Mar 18 15:53:15 studyclub systemd[1]: Started The nginx HTTP and reverse proxy server.


输出信息解读:
第二行:Loaded。这行在说明开机的时候这个unit会不会启动,enabled为开机启动,disabled为开机不启动
第三行:Active。现在这个unit的状态是正在执行(running)或没有执行(dead)
后面几行说明unit程序的PID信息,最后一行显示这个服务的操作信息。
操作信息格式为:时间、 信息发送主机、 哪一个服务的信息、实际信息内容


2. 正常关闭服务
[root@studyclub ~]# systemctl stop nginx
[root@studyclub ~]# systemctl status nginx
nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Thu 2021-03-18 15:55:36 CST; 3s ago
 Main PID: 56068 (code=exited, status=0/SUCCESS)

Mar 18 15:53:15 studyclub systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 18 15:53:15 studyclub nginx[56063]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Mar 18 15:53:15 studyclub nginx[56063]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Mar 18 15:53:15 studyclub systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
Mar 18 15:53:15 studyclub systemd[1]: Started The nginx HTTP and reverse proxy server.
Mar 18 15:55:36 studyclub systemd[1]: Stopping The nginx HTTP and reverse proxy server...
Mar 18 15:55:36 studyclub systemd[1]: Stopped The nginx HTTP and reverse proxy server.


我们看到Active那一行变为了inactive (dead),下面我们来总结一下都有哪些状态:
active(running):正在运行中
active(exited): 执行了一次就退出了的服务,这种服务不需要常驻内存,运行完成就退出了。
active(wating):正在执行中,但是现在正在等待其他的事件或信号,收到对应的事件或信号以后才能继续运行。
inactive:服务已经停止运行。
上面提到的是当前状态,下面我们再来看预设状态:
enabled:已经开启了开机自启动,操作系统开机后会自动运行这个程序
disabled:关闭了开机自启动,操作系统开机后不会启动这个程序
static:(了解即可)这个服务不能被enable,但是可以被依赖他的服务来启动
mask:(了解即可)这个服务无论如何都不能被启动,因为他已经被注销了。
服务管理的练习:
  1. 查看atd服务的状态:当前运行状态、设置的开机是否自启动

  2. 查看network服务的状态:当前运行状态、设置的开机是否自启动

  3. 请重启network服务


B

使用systemctl查看有哪些服务



[root@studyclub ~]# systemctl 【command】 [--type=TYPE] [--all]
选项:
  list-units
  list-unit-files
  --type=TYPE : 主要有service、socket、target等



1. 列出所有的服务
[root@studyclub ~]# systemctl # 不加参数,默认参数就是list-units
  UNIT LOAD ACTIVE SUB DESCRIPTION
  proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File System Automount Poi
  sys-devices-pci0000:00-0000:00:07.1-ata2-host1-target1:0:0-1:0:0:0-block-sr0.device loaded active plugged VMware_Virtual_IDE_CDROM_Drive
  sys-devices-pci0000:00-0000:00:10.0-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged VMware_Virtual_S 1
......
  sysinit.target loaded active active System Initialization
  timers.target loaded active active Timers
  systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories

LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.

94 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.


每一列的含义:

UNIT:服务的名称,同时可以根据服务名称的后缀看出这个服务的类别(type)

LOAD:开机时是否被加载

ACTIVE:目前的状态,和SUB列配合查看。就是我们systemctl status查看的Active那一行

DESCRIPTION:关于进程的描述

另外,systemctl不加参数,默认就是list-units


2. 列出所有已经安装的unit有哪些
[root@studyclub ~]# systemctl list-unit-files
UNIT FILE                           STATE   
proc-sys-fs-binfmt_misc.automount             static  
dev-hugepages.mount                    static  
dev-mqueue.mount                            static  
proc-sys-fs-binfmt_misc.mount               static  
......
time-sync.target                             static  
timers.target                            static  
umount.target                        static  
fstrim.timer                        disabled
systemd-readahead-done.timer                indirect
systemd-tmpfiles-clean.timer                static


上面的命令可以把所有的服务都列出来,而不像list-units仅仅以unit分类做大致说明。
上面是查看所有的服务,如果我们仅仅想看service这种类别的daemon,该如何查看?


[root@studyclub ~]# systemctl list-units --type=service --all
# 这样就只剩下*.service的unit了


新手应知:

    尝鲜Rocky Linux

《Linux基础及进阶》:

    040 - 进程管理与计划任务(1)-进程管理与job control
    041 - 进程管理与计划任务(2)-工作的前后台管理
    042 - 进程管理与计划任务(3)-nohup、ps、top、pstree
    043 - 进程管理与计划任务(4)-uptime\free\htop
    044 - 进程管理与计划任务(5)-crontab


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存